草庐IT

c++ - Visual C++ volatile

全部标签

c++ - 如果我在调用 DLL 中的函数时没有传递足够的参数,会发生什么?

在一个dll项目中,函数是这样的:extern"C"__declspec(dllexport)voidfoo(constwchar_t*a,constwchar_t*b,constwchar_t*c)在另一个项目中,我将使用foo函数,但我在头文件中声明foo函数extern"C"__declspec(dllimport)voidfoo(constwchar_t*a,constwchar_t*b)我只用两个参数调用它。结果是成功,我认为是关于__cdecl调用,但我想知道它是如何以及为什么起作用的。 最佳答案 32位默认调用约定是_

c++ - 分段故障本身挂起

我今天遇到了一些服务器问题,现在我将其归结为它无法摆脱出现段错误的进程。在进程出现seg-fault后,进程只是一直挂起,而不是被杀死。应该导致错误Segmentationfault(coredumped)的测试.#include#includeintmain(intargc,char**argv){char*buf;buf=malloc(1使用gccsegfault.c-osegfault&&chmod+xsegfault编译和设置权限.在有问题的服务器上运行此程序(并按回车键1次)会导致它挂起。我还在另一台具有相同内核版本(和大多数相同软件包)的服务器上运行它,它得到了seg-fa

c++ - 分段故障本身挂起

我今天遇到了一些服务器问题,现在我将其归结为它无法摆脱出现段错误的进程。在进程出现seg-fault后,进程只是一直挂起,而不是被杀死。应该导致错误Segmentationfault(coredumped)的测试.#include#includeintmain(intargc,char**argv){char*buf;buf=malloc(1使用gccsegfault.c-osegfault&&chmod+xsegfault编译和设置权限.在有问题的服务器上运行此程序(并按回车键1次)会导致它挂起。我还在另一台具有相同内核版本(和大多数相同软件包)的服务器上运行它,它得到了seg-fa

c++ - C++ 异常和 setjmp/longjmp 的代价

我编写了一个测试来测量线程中C++异常的成本。#include#include#include#includestaticconstintN=100000;staticvoiddoSomething(int&n){--n;throw1;}staticvoidthrowManyManyTimes(){intn=N;while(n){try{doSomething(n);}catch(intn){switch(n){case1:continue;default:std::coutthreads(nCPUs);for(inti=0;i这是我最初为了好玩而写的C版本。#include#incl

c++ - C++ 异常和 setjmp/longjmp 的代价

我编写了一个测试来测量线程中C++异常的成本。#include#include#include#includestaticconstintN=100000;staticvoiddoSomething(int&n){--n;throw1;}staticvoidthrowManyManyTimes(){intn=N;while(n){try{doSomething(n);}catch(intn){switch(n){case1:continue;default:std::coutthreads(nCPUs);for(inti=0;i这是我最初为了好玩而写的C版本。#include#incl

c++ - volatile 功能

总结:关键字volatile在应用于C和C++中的函数声明时有什么作用?详情:我发现可以编译标记为volatile的函数。但是,我不确定这会阻止什么编译器优化(如果有的话)。例如,我创建了以下测试用例:volatileintfoo(){return1;}intmain(){inttotal=0;inti=0;for(i=0;i当我使用clang-emit-llvm-S-O3test.c编译时(gcc也可以,但我认为llvmIR更具可读性)我得到:targettriple="x86_64-unknown-linux-gnu"definei32@foo()#0{reti321}define

c++ - volatile 功能

总结:关键字volatile在应用于C和C++中的函数声明时有什么作用?详情:我发现可以编译标记为volatile的函数。但是,我不确定这会阻止什么编译器优化(如果有的话)。例如,我创建了以下测试用例:volatileintfoo(){return1;}intmain(){inttotal=0;inti=0;for(i=0;i当我使用clang-emit-llvm-S-O3test.c编译时(gcc也可以,但我认为llvmIR更具可读性)我得到:targettriple="x86_64-unknown-linux-gnu"definei32@foo()#0{reti321}define

c++ - 为什么 std::cout 将 volatile 指针转换为 bool?

如果您尝试cout指向volatile类型的指针,甚至是您通常希望cout打印字符串的volatilechar指针,您将改为简单地得到'1'(我认为该指针不为null)。我假设输出流operator示例代码:#include#includeintmain(){charx[500];std::strcpy(x,"Helloworld");inty;int*z=&y;std::cout输出:Helloworld10x8046b6c1 最佳答案 ostream::operator除其他外,具有以下重载:ostream&operator当你

c++ - 为什么 std::cout 将 volatile 指针转换为 bool?

如果您尝试cout指向volatile类型的指针,甚至是您通常希望cout打印字符串的volatilechar指针,您将改为简单地得到'1'(我认为该指针不为null)。我假设输出流operator示例代码:#include#includeintmain(){charx[500];std::strcpy(x,"Helloworld");inty;int*z=&y;std::cout输出:Helloworld10x8046b6c1 最佳答案 ostream::operator除其他外,具有以下重载:ostream&operator当你

c++ - “qualifier”是什么意思?

“qualifier”的含义是什么?“qualifier”和“keyword”之间的区别是什么?对于C语言中的volatile限定词,我们可以说volatile是一个关键字,那么“qualifier”的含义是什么? 最佳答案 限定词添加了额外的“质量”,例如指定变量的易变性或常数。它们类似于形容词:“一个善变的人”,“一个易变的int”,“一个廉洁的女人”,“一个constdouble”。使用或不使用限定符,变量本身仍占据相同的内存量,并且每个位对状态/值的解释或贡献相同。限定符仅指定有关如何访问或存储它的内容。关键字是预定义的保留